home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
426-450
/
disk_436
/
aztecarp
/
source.lzh
/
gads.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-12-05
|
2KB
|
71 lines
/* Created 11/08/87 by -=+SDB+=- from cliparse.c provided by Manx */
/* Copyright (C) 1987 by Scott Ballantyne */
/* May be freely used by arp supporters/users */
/* This routine is called from _main() and parses the arguments passed from
* the CLI to the program. It uses the ARP tracking functions to allocate
* memory for the argv array, and sets up _argc and _argv (using GADS)
* which will eventually be passed as parameters to main().
*
* It uses the Global variables CLI_Template and CLI_Help to set the command
* templates and extra help string for GADS() - if you don't set these up
* yourself, you get the defaults.
*/
extern int _argc;
extern char **_argv;
extern char *CLI_Template;
extern char *CLI_Help;
extern char *_detach_name; /* for DETACHED programs */
_cli_parse(struct Process *pp,long alen,char *aptr)
{
struct CommandLineInterface *cli;
char *c,*cp;
int argcount,length;
if(pp -> pr_CLI)
{
cli = (struct CommandLineInterface *)BADDR(pp -> pr_CLI);
cp = (char *)BADDR(cli -> cli_CommandName);
}
else
cp = _detach_name;
length = cp[0]; /* Length of command name */
/* argcount *must* start at 3, do not change this.
* we need one for argv[0] = progname, and GADS() always
* requires one arg entry (for error messages, etc.)
* Then it is quasi standard for 'C' to have a final NULL as
* the argv array...
*/
for(argcount = 3,c = CLI_Template ; *c ; c++) /* Size we need for argv */
{
if(*c == ',')
argcount++;
}
if(!(c = ArpAlloc(length))) /* Get mem for name */
ArpExit(20L,ERROR_NO_FREE_STORE);
strncpy(c,&cp[1],cp[0]);
if(!(_argv = ArpAlloc((argcount * sizeof(*_argv)))))
ArpExit(20L,ERROR_NO_FREE_STORE);
_argv[0] = c;
_argc = (int)GADS(aptr,alen,CLI_Help,(_argv + 1),CLI_Template);
if(_argc < 0)
{
Printf("Bad Args for %s: %s\n",_argv[0],_argv[1]);
ArpExit(20,ERROR_LINE_TOO_LONG);
}
_argc++;
}